//
//  TFTableViewControllerProtocol.h
//  TFFoundation
//
//  Created by TFAppleWork-Summer on 2017/4/25.
//  Copyright © 2017年 TFAppleWork-Summer. All rights reserved.
//

#import <Foundation/Foundation.h>
//第三方
#import <TFTableViewManager/TFTableViewManagerKit.h>
#import <AsyncDisplayKit/AsyncDisplayKit.h>
//服从协议
#import "TFTableDataHandlerProtocol.h"
#import "TFTableDataRequestProtocol.h"

/**
 *  tableview类型
 */
typedef NS_ENUM(NSInteger, TFTableViewType) {
    /**
     *  UITableview类型
     */
    TFTableViewTypeUITableView,
    /**
     *  ASTableNode类型
     */
    TFTableViewTypeASTableNode,
};

/**
 tableview数据管理模式
 */
typedef NS_ENUM(NSUInteger, TFTableViewDataManagerMode) {
    /**
     tableview管理模式--普通，通过dataArray的方式进行
     */
    TFTableViewDataManagerModeNormal,
    /**
     tableview管理模式--tableViewManager模式，通过tableViewManager管理tableview
     */
    TFTableViewDataManagerModeTableViewManager,
};

/**
 列表视图控制器必须服从的协议
 */
@protocol TFTableViewControllerProtocol <NSObject>

@required;

///=============================================================================
/// @name 视图相关
///=============================================================================

/**
 列表类型，默认UITableViewStylePlain
 */
@property (nonatomic, assign) TFTableViewType tableViewType;

/**
 列表样式,默认TFTableViewTypeUITableView
 */
@property (nonatomic, assign) UITableViewStyle tableViewStyle;

/**
 UITableView类型的列表
 */
@property (nonatomic , strong, readonly, nullable) UITableView *tableView;

/**
 ASTableNode类型的列表
 */
@property (nonatomic , strong, readonly, nullable) ASTableNode *tableNode;

///=============================================================================
/// @name 数据请求
///=============================================================================

/**
 列表数据请求
 */
@property (nonatomic, strong, readonly, nullable) TFRequest<TFTableDataRequestProtocol> *tableDataRequest;

///=============================================================================
/// @name 数据处理
///=============================================================================

/**
 数据处理
 */
@property (nonatomic, strong, readonly, nullable) id<TFTableDataHandlerProtocol> tableDataHandler;

/**
 数据管理模式,默认TFTableViewDataManagerModeNormal
 */
@property (nonatomic, assign) TFTableViewDataManagerMode dataManagerMode;

/**
 数据对等模式，默认TFTableDataPeeringModeRow
 */
@property (nonatomic, assign) TFTableDataPeeringMode dataPeeringMode;

/**
 tableViewManager模式下的tableviewManager
 */
@property (nonatomic , strong, readonly, nullable) TFTableViewManager *tableViewManager;

/**
 普通模式下的数据数组
 */
@property (nonatomic , strong, readonly, nullable) NSMutableArray *dataArray;


@end
